package com.zhn;

/**
 * 给定一个 n × n 的二维矩阵 matrix 表示一个图像。请你将图像顺时针旋转 90 度。
 *
 * 你必须在 原地 旋转图像，这意味着你需要直接修改输入的二维矩阵。请不要 使用另一个矩阵来旋转图像。
 */


//两个步骤，先将矩阵上下转换，再将矩阵按照对角线交换，就可以得到结果
public class Rotate {
    public void rotate(int[][] matrix) {
        //上下转换
        for(int i = 0;i < matrix.length/2; i++){
            for(int j = 0;j < matrix[i].length; j++){
                int t = matrix[i][j];
                matrix[i][j] = matrix[matrix.length-i-1][j];
                matrix[matrix.length-i-1][j] = t;
            }
        }
        //对角线转换
        //第二层j的起点
            //如果j从0开始，那么内层循环会遍历整个矩阵，而外层循环只会遍历矩阵的一行。这样，内层循环会把矩阵的所有元素都转置一遍，而外层循环只会转置矩阵的一行，这样就没有实现矩阵的转置。
            //如果j从i开始，那么内层循环只会遍历当前行及其后面的列。这样，内层循环会把当前行及其后面的列都转置一遍，而外层循环会遍历整个矩阵，这样就实现了矩阵的转置。
        for(int i = 0;i < matrix.length; i++){
            for(int j = i;j < matrix[0].length; j++){
                int t = matrix[i][j];
                matrix[i][j] = matrix[j][i];
                matrix[j][i] = t;
            }
        }
    }

}
